home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / thesource-7.lha / Source / DefFunc.lha / DefFunc / dfopen.3 < prev    next >
Text File  |  1993-12-14  |  5KB  |  199 lines

  1.  
  2.  
  3.  
  4. DEFUNC(3)              C LIBRARY FUNCTIONS              DEFUNC(3)
  5.  
  6.  
  7.  
  8. NAME
  9.      dfopen, dfclose, dfcloseall -- dynamic function constructing
  10.      and deconstructing.
  11.  
  12. SYNOPSIS
  13.      #include <defunc.h>
  14.  
  15.      double (*dfopen(char* expression))(double x, double y);
  16.  
  17.      int    dfclose(double (*dcfnct)());
  18.      int    dfcloseall(void);
  19.  
  20. DESCRIPTION
  21.      _d_f_o_p_e_n() dynamically constructs a function from  an  expres-
  22.      sion  string passed to it. expression string is usually con-
  23.      sists of name and arguments setting information in front  of
  24.      the  expression  body  and  separate with it by pseudo token
  25.      '=':
  26.  
  27.           "name( arg1st, arg2nd ) = body"
  28.  
  29.      On success, _d_f_o_p_e_n() will return a pointer addressing  to  a
  30.      global  handle  function.   The global handle functions have
  31.      the prototype of
  32.  
  33.           double hdl(double x, double y);
  34.  
  35.      If the name string  is  a  legal  token  name(starting  with
  36.      alphabetic character and followed by alphabetic or numerical
  37.      characters), then the constructed function will be put  into
  38.      the  token table automatically.  If the 1st argument name is
  39.      a legal token name, then the argument  token  name  will  be
  40.      reset  to it( the default are "x" and "y"). Other options of
  41.      expression are:
  42.  
  43.        "body"               Only return the constructed function.
  44.  
  45.        "(arg1st, arg2st)="  Reset the argument token names only.
  46.  
  47.        "name()=body"        Put function token into table.
  48.  
  49.        "name = body"        Put constant token into table.
  50.  
  51.        "\name(arg1st, arg2nd)="  Just reset the argument token
  52.                             names. The name is ignored.
  53.  
  54.        "\name(arg1st, arg2nd)=body"  Reset the argument token
  55.                             names and return the constructed
  56.                             function without put it to the token
  57.                             table.
  58.  
  59.      On error or  the  expression  string  doesn't  generating  a
  60.  
  61.  
  62.  
  63. defunc 1.2              Last change: 1993                       1
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. DEFUNC(3)              C LIBRARY FUNCTIONS              DEFUNC(3)
  71.  
  72.  
  73.  
  74.      function(e.g.  an  expression  with  empty  body),  _d_f_o_p_e_n()
  75.      returns a null pointer. There are 32 global handle functions
  76.      available.   Thus, within one process, as many as 32 dynami-
  77.      cally constructed functions are allowed to coexist. The han-
  78.      dle  functions  can  only  be  freed  with  _d_e_f_u_n_c  funcions
  79.      _d_f_c_l_o_s_e() and _d_f_c_l_o_s_e_a_l_l() or end of the process.
  80.  
  81.      _d_f_c_l_o_s_e() will close the  dynamically  constructed  function
  82.      passed  to  it.  This will free the associated global handle
  83.      function for reuse. On success, _d_f_c_l_o_s_e() return (int)0.  If
  84.      this  function  is  still  in the global token table or this
  85.      function  is  not  returned  from  a  _d_f_o_p_e_n()  call,   then
  86.      _d_f_c_l_o_s_e() will not close it and return -1.
  87.  
  88.      _d_f_c_l_o_s_e_a_l_l() free all handle functions which are not on  the
  89.      global token table. On success call, _d_f_c_l_o_s_e_a_l_l() return the
  90.      total number of handles freed by it.
  91.  
  92. SEE ALSO
  93.      _d_e_f_u_n_c   and   getarguname(3),   nameargu(3),   namefnct(3),
  94.      namecnst(3),    clrfnct(3),    clrfnctall(3),    clrcnst(3),
  95.      clrcnstall(3)
  96.  
  97. EXAMPLES
  98.           double (*fnctptr)();
  99.           fnctptr = dfopen("Rho(re, im) = (re*re+im*im)^0.5");
  100.  
  101.      This will  return  a  hypotenus  function,  change  argument
  102.      tokens  to  "re"  and  "im"  and  put  the returned function
  103.      pointer into token table with name "Rho".
  104.  
  105.           double (*fnctptr)();
  106.           fnctptr = dfopen("pi = 2*asin(1)");
  107.  
  108.      This will return a constant function(return valuse is a con-
  109.      stant  --  3.14159...) and add a constant token to the token
  110.      table with value 3.14159... and name "pi".  As  the  '='  is
  111.      only a pseudo token, thus the expression
  112.  
  113.           "pi = PI = 2*asin(1)"
  114.  
  115.      is still unrecognizable by the _d_e_f_u_n_c
  116.  
  117. AUTHOR
  118.      Ke Jin
  119.      Physics Department
  120.      Queen's University
  121.      Kingston, Ontario
  122.      Canada K7L 3N6
  123.      jinke@sparky.phy.queensu.ca
  124.  
  125.  
  126.  
  127.  
  128.  
  129. defunc 1.2              Last change: 1993                       2
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. DEFUNC(3)              C LIBRARY FUNCTIONS              DEFUNC(3)
  137.  
  138.  
  139.  
  140. BUGS
  141.      Report bugs of _d_e_f_u_n_c library to the author by email.
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195. defunc 1.2              Last change: 1993                       3
  196.  
  197.  
  198.  
  199.